8.5 将行方向转为列方向
行索引数据转成列索引数列,是指将分布在行方向展示的数据,转换到列方向来展示,可以使用df.unstack()和df.pivot两个函数完成,最后转换的结果可以是DataFrame表格,也可以是Series数据
df.stack()是指定列层级的数据转到行方向,现在是做相反的操作,unstack()函数结构如下:
df.unstack(level=1,fill_name=None)
level:指定要转换到列方向的索引层级,可以是索引或标签,如果有指定多个索引层级,则放置在列表中。
fill_name:如果转换时产能缺失值,则可以设置替换值。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向1.xlsx" , index_col = 0 )
print (df)
t=df.stack().reset_index().rename( columns ={ "level_1":"科目",0:"分数" })
print (t)
返回:
| 语文 | 数学 | |
|---|---|---|
| 科目 | ||
| 张三 | 100 | 91 |
| 李四 | 86 | 95 |
| 王五 | 63 | 53 |
| 科目 | 科目 | 分数 | |
|---|---|---|---|
| 0 | 张三 | 语文 | 100 |
| 1 | 张三 | 数学 | 91 |
| 2 | 李四 | 语文 | 86 |
| 3 | 李四 | 数学 | 95 |
| 4 | 王五 | 语文 | 63 |
| 5 | 王五 | 数学 | 53 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向2.xlsx" , index_col =[ 0,1 ])
print (df)
t=df.unstack( level =[ 0,1 ]).reset_index()
print (t)
返回:
| 张三 | 李四 | 许流子 | 郭鬼子 | ||
|---|---|---|---|---|---|
| 年份 | 半年 | ||||
| 2018年 | 上半年 | 522 | 1135 | 704 | 890 |
| 下半年 | 546 | 663 | 976 | 642 | |
| 2019年 | 上半年 | 965 | 862 | 1052 | 941 |
| 下半年 | 646 | 728 | 611 | 1030 |
| level_0 | 年份 | 半年 | 0 | |
|---|---|---|---|---|
| 0 | 张三 | 2018年 | 上半年 | 522 |
| 1 | 张三 | 2018年 | 下半年 | 546 |
| 2 | 张三 | 2019年 | 上半年 | 965 |
| 3 | 张三 | 2019年 | 下半年 | 646 |
| 4 | 李四 | 2018年 | 上半年 | 1135 |
| 5 | 李四 | 2018年 | 下半年 | 663 |
| 6 | 李四 | 2019年 | 上半年 | 862 |
| 7 | 李四 | 2019年 | 下半年 | 728 |
| 8 | 许流子 | 2018年 | 上半年 | 704 |
| 9 | 许流子 | 2018年 | 下半年 | 976 |
| 10 | 许流子 | 2019年 | 上半年 | 1052 |
| 11 | 许流子 | 2019年 | 下半年 | 611 |
| 12 | 郭鬼子 | 2018年 | 上半年 | 890 |
| 13 | 郭鬼子 | 2018年 | 下半年 | 642 |
| 14 | 郭鬼子 | 2019年 | 上半年 | 941 |
| 15 | 郭鬼子 | 2019年 | 下半年 | 1030 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向2.xlsx" , index_col =[ 0,1 ])
print (df)
t=df.unstack( level =[ 0 ]).reset_index()
print (t)
返回:
| 半年 | 张三 | 李四 | 许流子 | 郭鬼子 | |||||
|---|---|---|---|---|---|---|---|---|---|
| 年份 | 年份 | 2018年 | 2019年 | 2018年 | 2019年 | 2018年 | 2019年 | 2018年 | 2019年 |
| 0 | 上半年 | 522 | 965 | 1135 | 862 | 704 | 1052 | 890 | 941 |
| 1 | 下半年 | 546 | 646 | 663 | 728 | 976 | 611 | 642 | 1030 |